package com.company.bookstore.schedule;

import com.company.bookstore.common.SpringUtils.SpringUtil;
import com.company.bookstore.common.redis.RedisUtil;
import com.company.bookstore.exception.user_admin_module.CustomSecondKillEndException;
import io.swagger.models.auth.In;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.quartz.CronTrigger;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;

/**
 * 当应用开启时，时间也算在工作流中
 *
 * 出现并行任务流？
 *
 逻辑：
 * 假设每天下午五点开启
 * 开启时间是null
 * 结束时间是null
 * 每次检擦redis上是否有miaosha_bookId key 如果没有 则从数据库中拉去图书数量并更新到redis 上作为图书秒杀开始标志
 * 如果redis上有数据则从redis上的数据更新到数据库中
 * 当redis上数据小于等于0时 打印日志 or 抛出异常？  ==》 抛出异常 然后停止  https://blog.csdn.net/weixin_34159110/article/details/92468869
 *
 * */
@DisallowConcurrentExecution
@Slf4j
public class MiaoShaJob implements Job {

    /**
     * cronTrigger  任务启动周期
     * SneakyThrows https://www.jianshu.com/p/7d0ed3aef34b
     * */
    @SneakyThrows
    @Override
    public void execute(JobExecutionContext jobExecutionContext) {

        RedisUtil redisUtil = (RedisUtil) SpringUtil.getBean(RedisUtil.class);
//        Integer bookId = (Integer) jobExecutionContext.getMergedJobDataMap().get("bookId");
//        Float second  = (Float)  jobExecutionContext.getMergedJobDataMap().get("second");
//        内置5秒取一次 每次存活10s
//        Integer result = redisUtil.setOrGetNumberOfSecondKill(bookId,2L,second,jobExecutionContext.getJobDetail().getKey().getName());
        redisUtil.checkSecondKill(jobExecutionContext);
        log.info("MiaoShaJob ： 运行");
//        log.info("job finished result :{}",result );
    }

}
